﻿using System;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using ENProyectoSIETE;
using ENProyecto7;
//using CADProyectoSIETE;
using System.IO;

namespace ProyectoSIETE
{
    public partial class frmGestionEnemigos : Form
    {
        private bool editando = false;

        private string directorioImagenes = @"..\..\..\WebProyectoSiete\img\";

        public frmGestionEnemigos()
        {
            InitializeComponent();
        }

        private void btnMenu_Click(object sender, EventArgs e)
        {

        }

        private void nuevoEnemigoToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void nomEnemigo_TextChanged(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void label5_Click(object sender, EventArgs e)
        {

        }

        private void formEnemigos_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'bDProyecto7DataSet.Enemigo' Puede moverla o quitarla según sea necesario.
            this.enemigoTableAdapter.Fill(this.bDProyecto7DataSet.Enemigo);

            /* PRUEBA PARA RUTAS RELATIVA, FUNCIONA */
            //pictureBox1.ImageLocation = @"..\..\..\imagenes\esqui.jpg";            
        }

        private void btnExaminar_Click(object sender, EventArgs e)
        {
            DialogResult resultado = ofdImagenEnemigo.ShowDialog();
            if (resultado == DialogResult.OK)
            {
                tbImagenEnemigo.Text = ofdImagenEnemigo.FileName;
                pbEnemigo.ImageLocation = ofdImagenEnemigo.FileName; 
            }

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            bool datosOK = true;
            Regex alfanumericos = new Regex("[^a-zA-Z0-9*]");

            epEnemigo.SetError(tbNomEnemigo, "");
            epEnemigo.SetError(numAtaqueEnemigo, "");
            epEnemigo.SetError(numDefensaEnemigo, "");
            epEnemigo.SetError(numPVEnemigo, "");
            epEnemigo.SetError(numPuntosEnemigo, "");

            //Comprobamos que los datos insertados en el formulario son correctos
            if (tbNomEnemigo.Text == null || tbNomEnemigo.Text == "" || alfanumericos.IsMatch(tbNomEnemigo.Text))
            {
                epEnemigo.SetError(tbNomEnemigo, "Introduce un nombre");
                datosOK = false;
            }
            if (numAtaqueEnemigo.Value == 0)
            {
                epEnemigo.SetError(numAtaqueEnemigo, "El ataque debe ser mayor que 0");
                datosOK = false;
            }
            if (numPVEnemigo.Value == 0)
            {
                epEnemigo.SetError(numPVEnemigo, "Los PV deben ser mayor que 0");
                datosOK = false;
            }
            if (numDefensaEnemigo.Value == 0)
            {
                epEnemigo.SetError(numDefensaEnemigo, "La defensa debe ser mayor que 0");
                datosOK = false;
            }
            if (numPuntosEnemigo.Value == 0)
            {
                epEnemigo.SetError(numPuntosEnemigo, "Los puntos deben ser mayor que 0");
                datosOK = false;
            }

            if (datosOK)
            {
                try
                {
                    string[] ficheroEnemigo = tbImagenEnemigo.Text.Split(new char[] { '\\' });

                    string imagenEnemigo = ficheroEnemigo[ficheroEnemigo.Length - 1];

                    ENEnemigo enemigo = new ENEnemigo(tbNomEnemigo.Text, (int)numAtaqueEnemigo.Value, (int)numPVEnemigo.Value, (int)numDefensaEnemigo.Value, (int)numPuntosEnemigo.Value, imagenEnemigo);                    

                    //---Copiamos la imagen al directorio "imagenes" del proyecto
                    
                    string ficheroDestino = Path.Combine(directorioImagenes, imagenEnemigo);

                    //---Si la carpeta "Imagenes" dentro del proyecto no exisitiera, la crearíamos
                    if (Directory.Exists(directorioImagenes))
                    {
                        Directory.CreateDirectory(directorioImagenes);
                    }

                    //---Copiamos el fichero
                    File.Copy(tbImagenEnemigo.Text, ficheroDestino, true);

                    //--------------------------------
                    enemigo.insertarEnemigo();

                    //this.enemigoTableAdapter.Fill(this.bDProyecto7DataSet.Enemigo);

                    dgvEnemigo.DataSource = enemigo.obtenerEnemigos(); ;

                    tbNomEnemigo.Text = "";
                    tbImagenEnemigo.Text = "";
                    numAtaqueEnemigo.Value = 0;
                    numDefensaEnemigo.Value = 0;
                    numPuntosEnemigo.Value = 0;
                    numPVEnemigo.Value = 0;
                    pbEnemigo.ImageLocation = "";
                }
                catch
                {
                    MessageBox.Show("Se ha producido un error al crear el enemigo");
                }
            }
        }

        private void lbResultadoInsertar_Click(object sender, EventArgs e)
        {

        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea borrar el enemigo " + dgvEnemigo.CurrentRow.Cells[1].Value.ToString() + "?", "Confirmar borrado", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                try
                {
                    ENEnemigo enemigo = new ENEnemigo();
                    

                    enemigo.IdEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[0].Value.ToString());
                    enemigo.NombreEnemigo = dgvEnemigo.CurrentRow.Cells[1].Value.ToString();
                    enemigo.AtaqueEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[2].Value.ToString());
                    enemigo.VidaEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[3].Value.ToString());
                    enemigo.DefensaEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[4].Value.ToString());
                    enemigo.PuntosEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[5].Value.ToString());
                    enemigo.ImagenEnemigo = dgvEnemigo.CurrentRow.Cells[6].Value.ToString();

                    enemigo.borrarEnemigo();

                    dgvEnemigo.DataSource = enemigo.obtenerEnemigos();                    

                    tbNomEnemigo.Text = "";
                    tbImagenEnemigo.Text = "";
                    numAtaqueEnemigo.Value = 0;
                    numDefensaEnemigo.Value = 0;
                    numPuntosEnemigo.Value = 0;
                    numPVEnemigo.Value = 0;
                    pbEnemigo.ImageLocation = "";

                    editando = false;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al borrar un enemigo", "Error", MessageBoxButtons.OK);
                }
            }
        }

        private void dgvEnemigo_CellClick(object sender, DataGridViewCellEventArgs e)
        {

            try
            {
                editando = true;

                ENEnemigo enemigo = new ENEnemigo();
                enemigo.IdEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[0].Value.ToString());

                enemigo.obtenerEnemigo();

                tbNomEnemigo.Text = enemigo.NombreEnemigo;
                if (tbImagenEnemigo.Text != null && tbImagenEnemigo.Text != "")
                {
                    tbImagenEnemigo.Text = enemigo.ImagenEnemigo;
                }

                numAtaqueEnemigo.Value = enemigo.AtaqueEnemigo;
                numPVEnemigo.Value = enemigo.VidaEnemigo;
                numDefensaEnemigo.Value = enemigo.DefensaEnemigo;
                numPuntosEnemigo.Value = enemigo.PuntosEnemigo;
                lbIdEnemigo.Text = enemigo.IdEnemigo.ToString();

                string imagenEnemigo = enemigo.ImagenEnemigo;

                if (File.Exists(directorioImagenes + imagenEnemigo))
                    pbEnemigo.ImageLocation = directorioImagenes + imagenEnemigo;
                else
                    pbEnemigo.ImageLocation = directorioImagenes + "sin_imagen.png";
            }
            catch
            {
                MessageBox.Show("Se ha producido un error al intentar cargar el enemigo");
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
                try
                {
                    DataTable listaresultados = new DataTable();
                    ENEnemigo enemigo = new ENEnemigo();
                    enemigo.NombreEnemigo = tbBuscarEnemigo.Text;

                    listaresultados = enemigo.obtenerEnemigoNombre();

                    if (listaresultados.Rows.Count == 0)
                    {
                        MessageBox.Show("No se ha encontrado ninguna coincidencia", "Error", MessageBoxButtons.OK);
                    }
                    else
                    {
                        //int i = 0;
                        //bool encontrado = false;

                        //Deseleccionamos las filas que pudieran estar seleccionadas anteriormente
                        //dgvEnemigo.ClearSelection();

                        dgvEnemigo.DataSource = listaresultados;
                        dgvEnemigo.Refresh();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK);
                }
            
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            bool datosOK = true;
            Regex alfanumericos = new Regex("[^a-zA-Z0-9*]");

            epEnemigo.SetError(tbNomEnemigo, "");
            epEnemigo.SetError(numAtaqueEnemigo, "");
            epEnemigo.SetError(numDefensaEnemigo, "");
            epEnemigo.SetError(numPVEnemigo, "");
            epEnemigo.SetError(numPuntosEnemigo, "");

            //Comprobamos que los datos insertados en el formulario son correctos
            if (tbNomEnemigo.Text == null || tbNomEnemigo.Text == "" || alfanumericos.IsMatch(tbNomEnemigo.Text))
            {
                epEnemigo.SetError(tbNomEnemigo, "Introduce un nombre");
                datosOK = false;
            }
            if (numAtaqueEnemigo.Value == 0)
            {
                epEnemigo.SetError(numAtaqueEnemigo, "El ataque debe ser mayor que 0");
                datosOK = false;
            }
            if (numPVEnemigo.Value == 0)
            {
                epEnemigo.SetError(numPVEnemigo, "Los PV deben ser mayor que 0");
                datosOK = false;
            }
            if (numDefensaEnemigo.Value == 0)
            {
                epEnemigo.SetError(numDefensaEnemigo, "La defensa debe ser mayor que 0");
                datosOK = false;
            }
            if (numPuntosEnemigo.Value == 0)
            {
                epEnemigo.SetError(numPuntosEnemigo, "Los puntos deben ser mayor que 0");
                datosOK = false;
            }

            if (datosOK)
            {
                ENEnemigo enemigo = new ENEnemigo(tbNomEnemigo.Text, (int)numAtaqueEnemigo.Value, (int)numPVEnemigo.Value, (int)numDefensaEnemigo.Value, (int)numPuntosEnemigo.Value, tbImagenEnemigo.Text, int.Parse(lbIdEnemigo.Text));

                enemigo.editarEnemigo();

                //this.enemigoTableAdapter.Fill(this.bDProyecto7DataSet.Enemigo);

                //----ACTUALIZAMOS EL DATAGRID
                dgvEnemigo.DataSource = enemigo.obtenerEnemigos();

                editando = false;

                tbNomEnemigo.Text = "";
                tbImagenEnemigo.Text = "";
                numAtaqueEnemigo.Value = 0;
                numDefensaEnemigo.Value = 0;
                numPuntosEnemigo.Value = 0;
                numPVEnemigo.Value = 0;
                pbEnemigo.ImageLocation = "";
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            editando = false;

            tbNomEnemigo.Text = "";
            tbImagenEnemigo.Text = "";
            numAtaqueEnemigo.Value = 0;
            numDefensaEnemigo.Value = 0;
            numPuntosEnemigo.Value = 0;
            numPVEnemigo.Value = 0;
            pbEnemigo.ImageLocation = "";
        }

        private void tbBuscarEnemigo_MouseClick(object sender, MouseEventArgs e)
        {
            tbBuscarEnemigo.Text = "";
        }

        private void btnMostrar_Click(object sender, EventArgs e)
        {
            try
            {
                ENEnemigo enemigo = new ENEnemigo();
                enemigo.IdEnemigo = int.Parse(dgvEnemigo.CurrentRow.Cells[0].Value.ToString());

                enemigo.obtenerEnemigo();

                tbNomEnemigo.Text = enemigo.NombreEnemigo;
                if (tbImagenEnemigo.Text != null && tbImagenEnemigo.Text != "")
                {
                    tbImagenEnemigo.Text = enemigo.ImagenEnemigo;
                }

                numAtaqueEnemigo.Value = enemigo.AtaqueEnemigo;
                numPVEnemigo.Value = enemigo.VidaEnemigo;
                numDefensaEnemigo.Value = enemigo.DefensaEnemigo;
                numPuntosEnemigo.Value = enemigo.PuntosEnemigo;
                lbIdEnemigo.Text = enemigo.IdEnemigo.ToString() ;

                string imagenEnemigo = enemigo.ImagenEnemigo;

                //tbImagenEnemigo.Text = @"..\..\..\imagenes\"+imagenEnemigo;
                pbEnemigo.ImageLocation = @"..\..\..\WebProyectoSIETE\img\" + imagenEnemigo;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK);
            }
        }

        private void Salir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click_1(object sender, EventArgs e)
        {
            if (editando)
            {
                bool datosOK = true;
                Regex alfanumericos = new Regex("[^a-zA-Z0-9*]");

                epEnemigo.SetError(tbNomEnemigo, "");
                epEnemigo.SetError(numAtaqueEnemigo, "");
                epEnemigo.SetError(numDefensaEnemigo, "");
                epEnemigo.SetError(numPVEnemigo, "");
                epEnemigo.SetError(numPuntosEnemigo, "");

                //Comprobamos que los datos insertados en el formulario son correctos
                if (tbNomEnemigo.Text == null || tbNomEnemigo.Text == "" || alfanumericos.IsMatch(tbNomEnemigo.Text))
                {
                    epEnemigo.SetError(tbNomEnemigo, "Introduce un nombre");
                    datosOK = false;
                }
                if (numAtaqueEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numAtaqueEnemigo, "El ataque debe ser mayor que 0");
                    datosOK = false;
                }
                if (numPVEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numPVEnemigo, "Los PV deben ser mayor que 0");
                    datosOK = false;
                }
                if (numDefensaEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numDefensaEnemigo, "La defensa debe ser mayor que 0");
                    datosOK = false;
                }
                if (numPuntosEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numPuntosEnemigo, "Los puntos deben ser mayor que 0");
                    datosOK = false;
                }

                if (datosOK)
                {
                    try
                    {
                        string[] ficheroEnemigo = tbImagenEnemigo.Text.Split(new char[] { '\\' });

                        string imagenEnemigo = ficheroEnemigo[ficheroEnemigo.Length - 1];

                        ENEnemigo enemigo = new ENEnemigo(tbNomEnemigo.Text, (int)numAtaqueEnemigo.Value, (int)numPVEnemigo.Value, (int)numDefensaEnemigo.Value, (int)numPuntosEnemigo.Value, imagenEnemigo, int.Parse(lbIdEnemigo.Text));

                        //---Copiamos la imagen al directorio "imagenes" del proyecto

                        string ficheroDestino = Path.Combine(directorioImagenes, imagenEnemigo);

                        //---Si la carpeta "Imagenes" dentro del proyecto no exisitiera, la crearíamos
                        if (Directory.Exists(directorioImagenes))
                        {
                            Directory.CreateDirectory(directorioImagenes);
                        }

                        //---Copiamos el fichero (si el usuario ha elegido imagen)
                        if(tbImagenEnemigo.Text != ""){
                            File.Copy(tbImagenEnemigo.Text, ficheroDestino, true);
                        }
                        //--------------------------------

                        //---Finalmente insertamos el enemigo en la BD
                        enemigo.editarEnemigo();

                        dgvEnemigo.DataSource = enemigo.obtenerEnemigos();

                        editando = false;

                        tbNomEnemigo.Text = "";
                        tbImagenEnemigo.Text = "";
                        numAtaqueEnemigo.Value = 0;
                        numDefensaEnemigo.Value = 0;
                        numPuntosEnemigo.Value = 0;
                        numPVEnemigo.Value = 0;
                        pbEnemigo.ImageLocation = "";
                    }
                    catch
                    {
                        MessageBox.Show("Se ha producido un error al intentar editar el enemigo");
                    }
                }
            

            }
            else
            {
                bool datosOK = true;
                Regex alfanumericos = new Regex("[^a-zA-Z0-9*]");

                epEnemigo.SetError(tbNomEnemigo, "");
                epEnemigo.SetError(numAtaqueEnemigo, "");
                epEnemigo.SetError(numDefensaEnemigo, "");
                epEnemigo.SetError(numPVEnemigo, "");
                epEnemigo.SetError(numPuntosEnemigo, "");

                //Comprobamos que los datos insertados en el formulario son correctos
                if (tbNomEnemigo.Text == null || tbNomEnemigo.Text == "" || alfanumericos.IsMatch(tbNomEnemigo.Text))
                {
                    epEnemigo.SetError(tbNomEnemigo, "Introduce un nombre");
                    datosOK = false;
                }
                if (numAtaqueEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numAtaqueEnemigo, "El ataque debe ser mayor que 0");
                    datosOK = false;
                }
                if (numPVEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numPVEnemigo, "Los PV deben ser mayor que 0");
                    datosOK = false;
                }
                if (numDefensaEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numDefensaEnemigo, "La defensa debe ser mayor que 0");
                    datosOK = false;
                }
                if (numPuntosEnemigo.Value == 0)
                {
                    epEnemigo.SetError(numPuntosEnemigo, "Los puntos deben ser mayor que 0");
                    datosOK = false;
                }

                if (datosOK)
                {
                    try
                    {
                        string[] ficheroEnemigo = tbImagenEnemigo.Text.Split(new char[] { '\\' });

                        string imagenEnemigo = ficheroEnemigo[ficheroEnemigo.Length - 1];

                        ENEnemigo enemigo = new ENEnemigo(tbNomEnemigo.Text, (int)numAtaqueEnemigo.Value, (int)numPVEnemigo.Value, (int)numDefensaEnemigo.Value, (int)numPuntosEnemigo.Value, imagenEnemigo);

                        //---Copiamos la imagen al directorio "imagenes" del proyecto

                        string ficheroDestino = Path.Combine(directorioImagenes, imagenEnemigo);

                        //---Si la carpeta "Imagenes" dentro del proyecto no exisitiera, la crearíamos
                        if (Directory.Exists(directorioImagenes))
                        {
                            Directory.CreateDirectory(directorioImagenes);
                        }

                        //---Copiamos el fichero
                        if (tbImagenEnemigo.Text != "")
                        {
                            File.Copy(tbImagenEnemigo.Text, ficheroDestino, true);
                        }
                        //--------------------------------
                        enemigo.insertarEnemigo();
                        

                        //this.enemigoTableAdapter.Fill(this.bDProyecto7DataSet.Enemigo);

                        dgvEnemigo.DataSource = enemigo.obtenerEnemigos();

                        tbNomEnemigo.Text = "";
                        tbImagenEnemigo.Text = "";
                        numAtaqueEnemigo.Value = 0;
                        numDefensaEnemigo.Value = 0;
                        numPuntosEnemigo.Value = 0;
                        numPVEnemigo.Value = 0;
                        pbEnemigo.ImageLocation = "";
                    }
                    catch
                    {
                        MessageBox.Show("Se ha producido un error al crear el enemigo");
                    }
                }


            }
        }

        private void frmGestionEnemigos_Enter(object sender, EventArgs e)
        {
        }


        
    }
}
